package love.yuanmengrobot.qianyugarden.service;

import love.yuanmengrobot.qianyugarden.entity.*;
import love.yuanmengrobot.qianyugarden.utils.Events;
import love.yuanmengrobot.qianyugarden.utils.ParamReceive;

import java.util.List;
import java.util.Map;

/**
 * 书籍(Book)表服务接口
 *
 * @author lzl
 * @since 2021-07-13 14:28:10
 */
public interface BookService {

    //获取语言标题列表
    List<ThousandLanguage> getAllLanguage();
    //关联查询书籍与其对应事件
    BookEventAbook queryByBookId(String bookId);

    /**
     * 通过ID查询单条数据
     *
     * @param objectid 主键
     * @return 实例对象
     */
    BookAuser queryById(String objectid);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BookEventAbook> queryAllByLimit(int offset, int limit);
    List<Book> queryAllbookByLimit(String userid,int offset, int limit);

    //查询所有图书
    int queryAllBooksCount(String userid);

    //通过bookEvent的objectid更新bookEvent的数据
    void likeEvents(String bookId, int result);

    void observationEvents(String bookId, int result);

    void collectionEvents(String bookId, int result);

    void downloadEvents(String bookId, int result);

    List<BookEventAbook> queryBookByAllConstraint(ParamReceive params);

    //业务处理
    Map processService(ParamReceive params);

    Map userEventProcess(User user, String bookId);

    Map userEvents(User user, Events events);

    /**
     * 新增数据
     *
     * @param book 实例对象
     * @return 实例对象
     */
    Book insert(Book book);
    /**
     * 新增数据,并且新增对应的标签、事件
     *
     * @param book 实例对象
     * @return 实例对象
     */
    Book insertAndLabelAndEvent(Book book,BookLabels[] bookLabels,BookEvent bookEvent);

    /**
     * 修改数据
     *
     * @param book 实例对象
     * @return 实例对象
     */
    Book update(Book book);

    /**
     * 通过主键删除数据
     *
     * @param objectid 主键
     * @return 是否成功
     */
    boolean deleteById(String objectid);

}
